
var obj = {
  a: {
    c: [
      1, 2
    ]
  },
  b: 1
}
obj.a.c.d = obj
console.log(cycleDetector(obj)) // true


// 利用数组方法 和 递归思想

function cycleDetector(obj) {
  let params = false
  let arr = []
  function demo(obj) {
    for (let key in obj) {
      if (typeof obj[key] == 'object') {
        if (arr.indexOf(obj[key]) >= 0) {
          params = true
        } else {
          arr.push(obj[key])
          demo(obj[key])
        }
      }
    }
  }
  demo(obj)
  return params
}







// function cycleDetector(obj) {
//   const arr = []
//   let flag = false
//   function cycle(o) {
//     const keys = Object.keys(o)
//     for (const key of keys) {
//       const temp = o[key]
//       if (typeof temp === 'object' && temp !== null) {
//         if (arr.indexOf(temp) >= 0) {
//           flag = true
//           return
//         }
//         arr.push(temp)
//         cycle(temp)
//       }
//     }
//   }
//   cycle(obj)
//   return flag
// }
